package cn.lovemmd.model.dto;

import cn.lovemmd.model.pojo.SysUser;

/**
 * 登录结果DTO
 * 用于封装登录状态和错误信息
 * 
 * @author TLS
 * @since 2024-01-01
 */
public class LoginResult {
    
    /**
     * 登录是否成功
     */
    private boolean success;
    
    /**
     * 用户信息（登录成功时返回）
     */
    private SysUser user;
    
    /**
     * 错误信息（登录失败时返回）
     */
    private String errorMessage;
    
    /**
     * 错误类型
     */
    private LoginErrorType errorType;
    
    /**
     * 登录错误类型枚举
     */
    public enum LoginErrorType {
        USER_NOT_FOUND("用户不存在"),
        PASSWORD_INCORRECT("密码错误"),
        ACCOUNT_DISABLED("账号已被禁用"),
        ACCOUNT_LOCKED("账号已被锁定"),
        UNKNOWN_ERROR("未知错误");
        
        private final String message;
        
        LoginErrorType(String message) {
            this.message = message;
        }
        
        public String getMessage() {
            return message;
        }
    }
    
    // 构造器
    public LoginResult() {}
    
    public LoginResult(boolean success, SysUser user, String errorMessage, LoginErrorType errorType) {
        this.success = success;
        this.user = user;
        this.errorMessage = errorMessage;
        this.errorType = errorType;
    }
    
    // Getter和Setter方法
    public boolean isSuccess() {
        return success;
    }
    
    public void setSuccess(boolean success) {
        this.success = success;
    }
    
    public SysUser getUser() {
        return user;
    }
    
    public void setUser(SysUser user) {
        this.user = user;
    }
    
    public String getErrorMessage() {
        return errorMessage;
    }
    
    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }
    
    public LoginErrorType getErrorType() {
        return errorType;
    }
    
    public void setErrorType(LoginErrorType errorType) {
        this.errorType = errorType;
    }
    
    /**
     * 创建成功结果
     */
    public static LoginResult success(SysUser user) {
        return new LoginResult(true, user, null, null);
    }
    
    /**
     * 创建失败结果
     */
    public static LoginResult failure(LoginErrorType errorType) {
        return new LoginResult(false, null, errorType.getMessage(), errorType);
    }
    
    /**
     * 创建失败结果（自定义错误信息）
     */
    public static LoginResult failure(LoginErrorType errorType, String customMessage) {
        return new LoginResult(false, null, customMessage, errorType);
    }
}
